package com.santoker.user.service.service.biz.record;

import com.santoker.user.service.dto.vo.DelBodyVo;
import com.santoker.user.service.dto.vo.DelListBodyVo;
import com.santoker.user.service.dto.vo.record.*;
import com.santoker.user.service.dto.vo.share.SharedDataVo;

import java.math.BigDecimal;
import java.util.List;

public interface RecordService {

    /**
     * 单个用户记录列表
     *
     * @param userId 用户ID
     * @return
     */
    List<UserRecordVo> getUserRecordList(Integer userId);

    /**
     * 单个用户分享列表
     *
     * @param userId 用户ID
     * @return
     */
    List<UserRecordVo> getUserShareList(Integer userId);

    /**
     * 单个分享记录
     *
     * @param recordId 记录ID
     * @return
     */
    SharedDataVo getSharedData(Integer recordId);

    /**
     * 分享、精选用户列表
     *
     * @return
     */
    List<UserVo> getUserListShareAndSelect();

    /**
     * 精选用户列表
     *
     * @return
     */
    List<UserVo> getUserListSelect();

    /**
     * 用户列表
     *
     * @return
     */
    List<UserVo> getAllUser();

    /**
     * 姓名搜索用户
     *
     * @param userName 姓名
     * @return
     */
    List<UserVo> searchUserByName(String userName);

    /**
     * 手机号搜索用户
     *
     * @param mobile 手机号
     * @return
     */
    List<UserVo> searchUserByMobile(String mobile);

    /**
     * 搜索曲线
     *
     * @param title      标题
     * @param searchType 搜索类型
     * @return
     */
    List<UserRecordVo> getUserRecordListByTitle(String title, Integer searchType);

    /**
     * 所有曲线
     *
     * @return
     */
    List<UserRecordVo> getAllRecord();

    /**
     * 所有训练集曲线
     *
     * @param type 类型
     * @return
     */
    List<UserRecordVo> getAllTrainRecord(String type);

    /**
     * 分享用户列表
     *
     * @return
     */
    List<UserVo> getUserListShare();

    /**
     * 增加记录信息
     *
     * @param body 请求体
     */
    Integer addRecord(RecordAddVo body);

    /**
     * 更新用户曲线的title与type
     *
     * @param body 请求体
     */
    void updateUserRecord(RecordModVo body);

    /**
     * 设置是否为精选曲线
     *
     * @param body 请求体
     */
    void setIsSelect(RecordIdVo body);

    /**
     * 设置是否为训练集
     *
     * @param body 请求体
     */
    void setIsTrain(RecordIdVo body);

    /**
     * 批量删除训练集
     *
     * @param body 请求体
     */
    void delTrainList(DelListBodyVo body);

    /**
     * 设置是否为分享
     *
     * @param body 请求体
     */
    void setIsShare(RecordIdVo body);

    /**
     * 删除记录信息
     *
     * @param body 请求体
     */
    void delRecord(DelBodyVo body);

    /**
     * 删除所有记录信息
     *
     * @param body 请求体
     */
    void delAllRecord(DelBodyVo body);

    /**
     * 删除分享记录信息
     *
     * @param body 请求体
     */
    void delShare(DelBodyVo body);

    /**
     * 更新记录信息
     *
     * @param body 请求体
     */
    void updateRecord(RecordUpdateVo body);

    /**
     * 获取记录列表
     *
     * @param body 请求体
     * @return
     */
    List<UserRecordVo> getRecordList(RecordListVo body);

    /**
     * 计算火力
     *
     * @param body 请求体
     * @return
     */
    List<BigDecimal> calcFirepower(CalcFirepowerVo body);

    /**
     * 批量设置分享
     *
     * @param body 请求体
     */
    void batchSetShare(RecordIdListVo body);

    /**
     * 批量删除记录
     *
     * @param body 请求体
     */
    void batchDelRecord(RecordIdListDelVo body);

    /**
     * 获取曲线记录口令
     *
     * @param recordId 曲线记录ID
     * @return
     */
    String getRecordToken(Integer recordId);

    /**
     * 根据口令，获取曲线记录
     *
     * @param recordToken 曲线记录口令
     * @return
     */
    UserRecordVo getRecordByRecordToken(String recordToken);

    /**
     * 设置是否置顶
     *
     * @param body 请求体
     */
    void setIsTop(RecordIdVo body);

}
